#ifndef DOODLE_H
#define DOODLE_H

#include <string>

#include "SDL/SDL.h"
#include "SDL/SDL_image.h"
#include "core/GameComponent.h"
#include "core/GameObject.h"

namespace eats_core {

/**
 * @brief Classe que representa uma imagem. Comportamento de se dispor em tela.
 * Herda de GameComponent
 *
 * Agradecimentos: SDLTutoriais.com
 */

class Doodle : public GameComponent
{
    public:

		/**
		 * Construtor gordo do Doodle.
		 *
		 * @param file
		 * @param dest_surface
		 * @param _posX
		 * @param _posY
		 * @param relative se verdadeiro, a posição x e y se tornam o centro da imagem
		 */
        Doodle( std::string file, SDL_Surface * dest_object, int * _posX, int * _posY, bool _relative);
        virtual ~Doodle();

        static SDL_Surface * loadIMG(std::string file);
        static bool drawIMG(SDL_Surface* Surf_Dest, SDL_Surface* Surf_Src, int X, int Y) ;
        static bool drawIMG(SDL_Surface* Surf_Dest, SDL_Surface* Surf_Src, int X, int Y, int X2, int Y2, int W, int H);

        bool setUp();
        bool tearDown();
        bool render();
        bool render(int x, int y, int w, int h);

        /**
         * @brief Função usada para renderizar casos onde o posicionamento do inicio da imagem  é constantemente alterado.
         */
        bool render(int x, int y, int x2 , int y2, int w, int h);

        int * posX, * posY;
        SDL_Surface * surf_dest;
        std::string _file;
        bool relative;


    protected:
    private:
        SDL_Surface* _doodle_img;

};

}

#endif // DOODLE_H
